// 创建并导出 useList 函数
export const useList = (props) => {
  // 初始化变量和响应式对象
  const page = ref(1); // 当前页数
  const pageSize = ref(10); // 每页数据条数
  const dataList = ref([]); // 数据列表
  const isDone = ref(false); // 数据是否加载完成标志
  const otherParams = reactive(props.otherParams || {}); // 其他参数
  const searchVal = ref(""); // 搜索关键词

  // 异步加载数据函数
  async function loadData(param) {
    if (isDone.value) return false;
    param && Object.assign(otherParams, param);
    const params = {
      page: page.value,
      pageSize: pageSize.value,
      ...otherParams,
    };
    // 调用传入的 listApi 方法获取数据
    let res = await props.listApi(params);
    // 处理获取的数据
    if (res.code == 1) {
      let { items, counts, pages } = res.result;
      if (page.value <= pages) {
        // 如果当前页数小于等于总页数
        isDone.value = false; // 数据未加载完成

        dataList.value.push(...items); // 将获取的数据添加到数据列表

        props.callBack?.(); // 调用回调函数
        page.value++; // 页数加一
      } else {
        isDone.value = true; // 数据加载完成
      }
    } else {
      isDone.value = true;
    }
  }

  // 搜索数据函数
  function searchData(params) {
    page.value = 1; // 重置当前页数
    dataList.value = []; // 清空数据列表
    isDone.value = false; // 标志数据未加载完成
    loadData(params); // 调用 loadData 方法进行加载数据
  }

  // 监听页面滚动到底部事件
  onReachBottom(() => {
    if (!isDone.value) loadData();
  });

  // 返回需要使用的变量和方法
  return {
    page,
    pageSize,
    dataList,
    loadData,
    isDone,
    searchData,
    searchVal,
  };
};
